﻿Public Class AnimationLaserstrahl
    Inherits ObjektAnimation
    Const HalteFrame As Integer = 2
    Dim Zähler As Integer = 0
    Dim Laser As GebäudeLaser = Nothing
    Public Sub New(ByVal X, ByVal Y, ByVal Musikspielen)
        MyBase.New(Musikspielen, ObjektSpielfeld.Bodenschlacht)
        Laser = Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebäude
        P.X = X
        P.Y = Y
        If Musikspielen = True Then
            '    MusikEngine.LoadWav(My.Settings.Resourcenpfad + "Sound\Explosion+Bombe.wav", False)
        End If

    End Sub

    Public Overrides Function Malen(ByVal intColor As System.Drawing.Color, Optional ByVal Zoomfaktor As Single = 1.0) As Boolean
        Dim sngRotation As Double = 0
        Grafikengine.szfScale = Nothing
        Select Case My.Settings.TerrainStyle
            Case TerrainStyle.CommanderWars2
                Grafikengine.ptfRotCenter = New Point(CInt(71 / 2), CInt(63 / 2))
                With Grafikengine.recBild
                    .X = 71 * Frame : .Width = 71
                    .Y = 0 : .Height = 63
                End With
            Case Else
                Grafikengine.ptfRotCenter = New Point(CInt(47 / 2), CInt(42 / 2))
                With Grafikengine.recBild
                    .X = 47 * Frame : .Width = 47
                    .Y = 0 : .Height = 42
                End With
        End Select
       
        Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * P.X + Objektverwalter.Spielfeld.BildschirmKooX - 1, Hauptmenü.Feldbreite * P.Y + Objektverwalter.Spielfeld.BildschirmKooY - 2)

        Grafikengine.Sprite.Draw2D(TexturenHalter.GetLaserMitte, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
        If Frame > 9 Then
            Grafikengine.ptfRotCenter = New Point(Hauptmenü.Feldbreite / 2, Hauptmenü.Feldbreite)

            With Grafikengine.recBild
                .X = Hauptmenü.Feldbreite * (Frame - 10) : .Width = Hauptmenü.Feldbreite
                .Y = 0 : .Height = Hauptmenü.Feldbreite * 2
            End With

            For I As Integer = 1 To Laser.Reichweite + 1
                Dim X As Integer = Laser.Rechteck.X - I
                Dim Y As Integer = Laser.Rechteck.Y

                If Objektverwalter.Spielfeld.OnMap(X, Y) Then
                    If I = 1 Then
                        Grafikengine.szfScale = New Size(Hauptmenü.Feldbreite / 2, Hauptmenü.Feldbreite * 2)
                        Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * X + Objektverwalter.Spielfeld.BildschirmKooX - Hauptmenü.Feldbreite / 2, Hauptmenü.Feldbreite * Y + Objektverwalter.Spielfeld.BildschirmKooY - 1)
                    Else
                        Grafikengine.szfScale = Nothing
                        Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * X + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * Y + Objektverwalter.Spielfeld.BildschirmKooY - 1)
                    End If

                    Grafikengine.Sprite.Draw2D(TexturenHalter.GetLaserStrahl, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                End If
            Next
            'Nach links markieren
            For I2 As Integer = 1 To Laser.Reichweite + 1
                Dim X As Integer = Laser.Rechteck.X + I2
                Dim Y As Integer = Laser.Rechteck.Y
                If Objektverwalter.Spielfeld.OnMap(X, Y) Then
                    If I2 = 1 Then
                        Grafikengine.szfScale = New Size(Hauptmenü.Feldbreite / 2, Hauptmenü.Feldbreite * 2)
                        Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * X + Objektverwalter.Spielfeld.BildschirmKooX + Hauptmenü.Feldbreite / 2, Hauptmenü.Feldbreite * Y + Objektverwalter.Spielfeld.BildschirmKooY - 1)
                    Else
                        Grafikengine.szfScale = Nothing
                        Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * X + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * Y + Objektverwalter.Spielfeld.BildschirmKooY - 1)
                    End If

                    Grafikengine.Sprite.Draw2D(TexturenHalter.GetLaserStrahl, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                End If
            Next
            'Nach oben markieren
            sngRotation = Math.PI / 2
            For I3 As Integer = 1 To Laser.Reichweite + 1
                Dim X As Integer = Laser.Rechteck.X
                Dim Y As Integer = Laser.Rechteck.Y - I3
                If Objektverwalter.Spielfeld.OnMap(X, Y) Then
                    If I3 = 1 Then
                        Grafikengine.szfScale = New Size(Hauptmenü.Feldbreite / 2, Hauptmenü.Feldbreite * 2)
                        Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * X + Objektverwalter.Spielfeld.BildschirmKooX - 1, Hauptmenü.Feldbreite * Y + Objektverwalter.Spielfeld.BildschirmKooY - Hauptmenü.Feldbreite / 2)
                    Else
                        Grafikengine.szfScale = Nothing
                        Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * X + Objektverwalter.Spielfeld.BildschirmKooX - 1, Hauptmenü.Feldbreite * Y + Objektverwalter.Spielfeld.BildschirmKooY)
                    End If

                    Grafikengine.Sprite.Draw2D(TexturenHalter.GetLaserStrahl, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                End If
            Next
            'Nach unten markiern
            For I4 As Integer = 1 To Laser.Reichweite + 1
                Dim X As Integer = Laser.Rechteck.X
                Dim Y As Integer = Laser.Rechteck.Y + I4
                If Objektverwalter.Spielfeld.OnMap(X, Y) Then
                    Grafikengine.szfScale = Nothing
                    Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * X + Objektverwalter.Spielfeld.BildschirmKooX - 1, Hauptmenü.Feldbreite * Y + Objektverwalter.Spielfeld.BildschirmKooY)
                    Grafikengine.Sprite.Draw2D(TexturenHalter.GetLaserStrahl, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                End If
            Next

        End If
        If Frame = 16 Then
            If Zähler > 8 Then
                Frame = 17
                Zähler = 0
            Else
                Zähler += 1
            End If
        Else
            If HalteFrame <= Zähler Then
                Frame += 1
                Zähler = 0
            Else
                Zähler += 1
            End If
        End If
        If Frame > 18 Then
            Return False
        Else
            Return True
        End If
    End Function
End Class
